//package com.im.netty.handler;
//
//import io.netty.channel.*;
//import io.netty.handler.timeout.IdleState;
//import io.netty.handler.timeout.IdleStateEvent;
//import lombok.extern.slf4j.Slf4j;
//
//import java.util.Map;
//import java.util.Objects;
//
///**
// * @Author: szw
// * @Date: 2020/8/3 17:18
// * netty服务端处理器
// */
//@Slf4j
//public class NettyServerHandler2 extends ChannelInboundHandlerAdapter {
//
//    /**
//     * 客户端连接会触发
//     */
//    @Override
//    public void channelActive(ChannelHandlerContext ctx) throws Exception {
//        log.info("客户端连接: Channel active......" + ctx.channel().remoteAddress().toString());
//    }
//
//    /**
//     * 客户端发消息会触发
//     */
//    @Override
//    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
//        try {
//            Channel channel = ctx.channel();
//            if (msg != null) {
//                log.info("======{}", msg.toString());
//            }
////            ChannelFuture channelFuture = channel.writeAndFlush("你好，默认回复消息");
////            channelFuture.addListener((ChannelFutureListener) future -> {
////                if (future.isSuccess()) { // 写操作完成，并没有错误发生
////                    log.info("successful");
////                } else { // 记录错误
////                    log.info("error");
////                    future.cause().printStackTrace();
////                }
////            });
//            ctx.flush();
//
////            ctx.writeAndFlush("101010");
//
//        } catch (Exception e) {
//            ctx.channel().close();
//            log.error("接收消息发生异常: Exception");
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 发生异常触发
//     */
//    @Override
//    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
//        try {
//            for (Map.Entry<String, Channel> entry : SendService.getClients().entrySet()) {
//                if (entry.getValue() == ctx.channel()) {
//                    SendService.clientsDel(entry.getKey());
//                    SendService.messageDel(entry.getKey());
//                    log.error("------[" + entry.getKey() + "]disConnect,heartBeat timeOut-------");
//                    break;
//                }
//            }
//        } catch (Exception e) {
//            log.error("exceptionCaught catch Exception");
//            e.printStackTrace();
//        } finally {
//            cause.printStackTrace();
//            ctx.channel().close();
//        }
//    }
//
//    /**
//     * 长连接超时处理
//     */
//    @Override
//    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
//        log.error("长连接超时处理");
//        if (evt instanceof IdleStateEvent) { // 超时事件
//            IdleStateEvent idleEvent = (IdleStateEvent) evt;
//            if (idleEvent.state() == IdleState.READER_IDLE) {//读
//                log.info("读 ：" + idleEvent);
//                for (Map.Entry<String, Channel> entry : SendService.getClients().entrySet()) {
//                    if (entry.getValue() == ctx.channel()) {
//                        SendService.clientsDel(entry.getKey());
//                        SendService.messageDel(entry.getKey());
//                        break;
//                    }
//                }
//                ctx.channel().close();
//            } else if (idleEvent.state() == IdleState.WRITER_IDLE) {//写
//                log.info("写 ：" + idleEvent);
//            } else if (idleEvent.state() == IdleState.ALL_IDLE) {//全部
//                log.info("全部 ：" + idleEvent);
//            }
//        }
//    }
//
//    @Override
//    public void handlerRemoved(ChannelHandlerContext ctx) throws Exception {
//        //执行客户端断开连接后的业务操作
//        Channel channel = ctx.channel();
//        channel.close();
//        for (Map.Entry<String, Channel> entry : SendService.getClients().entrySet()) {
//            if (Objects.equals(entry.getValue(), channel)) {
//                SendService.clientsDel(entry.getKey());
//                SendService.messageDel(entry.getKey());
//                log.info("断开连接: {}, {}", entry.getKey(), SendService.getMessage().get(entry.getKey()));
//            }
//        }
//        log.info("断开连接");
//    }
//
//
//}
